package imageclipper

import (
	"log"
	"os"
	"path"
	"path/filepath"
)

/*
生成临时文件用于图片裁剪
	1. 指定文件格式
	params:
		file_path: 源图片文件夹
		extension: 图片扩展名
		tmp_path:  临时文件夹
	returns:
		err: error
*/
func create_tmp_files(file_path, tmp_path, extension string) (err error) {

	matches, err := filepath.Glob(path.Join(file_path, "*."+extension))
	if err != nil {
		log.Println("读取源文件目录失败")
		return err
	}
	for _, m := range matches {
		buf, err := os.ReadFile(m)
		if err != nil {
			log.Println("读取原图片文件失败")
			return err
		}
		if err := os.WriteFile(path.Join(tmp_path, filepath.Base(m)), buf, 0755); err != nil {
			log.Println("创建临时文件失败")
			return err
		}
	}

	return nil
}

/*
裁剪后更新源图片文件夹
	1. 先删除再拷贝
	2. 更新后删除临时目录
	params:
		file_path: 源文件目录
		extension: 图片文件扩展名
		tmp_path:  临时目录
*/
func update_folder(file_path, tmp_path, extension string) (err error) {

	old_files, err := filepath.Glob(path.Join(file_path, "*."+extension))
	if err != nil {
		log.Println("更新裁剪图片时, 读取源文件目录失败")
		return err
	}
	for _, f := range old_files {
		if err := os.Remove(f); err != nil {
			return err
		}
	}

	new_files, err := filepath.Glob(path.Join(tmp_path, "*."+extension))
	if err != nil {
		log.Println("更新裁剪图片时, 读取临时文件目录失败")
		return err
	}
	for _, f := range new_files {
		buf, err := os.ReadFile(f)
		if err != nil {
			log.Println("更新裁剪图片时, 读取临时图片文件失败")
			return err
		}
		if err := os.WriteFile(path.Join(file_path, filepath.Base(f)), buf, 0755); err != nil {
			log.Println("更新裁剪图片时, 更新文件失败")
			return err
		}
	}

	if err := os.RemoveAll(tmp_path); err != nil {
		log.Println("更新裁剪图片时, 清理临时目录失败")
		return err
	}

	return nil
}
